/**
 * <pre>
 * Title: 		AccountService.java
 * Project: 	MSTS
 * Author:		pengfangliang
 * Create:	 	2012-6-18 下午04:15:13
 * Copyright: 	Copyright (c) 2012
 * Company:		Shenzhen Helper
 * <pre>
 */
package com.hengpeng.msls.service.account;

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;

import jxl.biff.drawing.Drawing;

import com.hengpeng.common.persist.QueryResult;
import com.hengpeng.common.persist.query.Restriction;
import com.hengpeng.common.persist.query.model.Order.OrderType;
import com.hengpeng.itfinbase.en.TransType;
import com.hengpeng.itfinbase.persist.Account;
import com.hengpeng.itfinbase.persist.AccountLog;
import com.hengpeng.itfinbase.persist.Payment;
import com.hengpeng.msls.port.client.vo.client.AccountTransType;

/**
 * <pre>
 *  资金服务接口
 * </pre>
 * @author pengfangliang
 * @version 1.0, 2012-6-18
 */
public interface AccountService
{
	/**
	 * <pre>
	 * 获取指定用户的账户信息
	 * </pre>
	 * @param userId
	 * @param isLock
	 * @return
	 */
	public Account getAccount(Long userId);

	/**
	 * <pre>
	 *  分页查询提现明细
	 * </pre>
	 * @param betcardNo 投注号码
	 * @param beginRequestTime 开始时间
	 * @param endRequestTime 截止时间
	 * @param state 处理状态
	 * @param pageIndex 当前页号
	 * @param pageSize 每页记录数
	 * @return
	 */
	List<Drawing> findDrawingWithPage(String betcardNo, Date beginRequestTime, Date endRequestTime,
			Payment.PayStatus state, Integer pageIndex, Integer pageSize);

	/**
	 * <pre>
	 * 分页查询提现明细
	 * </pre>
	 * @param pageIndex 当前页号
	 * @param pageSize 每页记录数
	 * @param sortord 排序方式
	 * @param rstcn4and 对提现实体的与条件
	 * @return
	 */
	QueryResult<Drawing> findDrawingByPage(Integer pageIndex, Integer pageSize,
			LinkedHashMap<String, OrderType> sortord, Restriction... rstcn4and);

	/**
	 * <pre>
	 *   查询总记录数
	 * </pre>
	 * @param betcardNo 投注卡号
	 * @param beginRequestTime 开始请求时间
	 * @param endRequestTime 截止请求时间
	 * @param state 状态
	 * @return
	 */
	Long count(String betcardNo, Date beginRequestTime, Date endRequestTime, Payment.PayStatus state);

	/**
	 * <pre>
	 *  动态分页查询用户资金明细流水
	 * </pre>
	 * @param userName 用户名
	 * @param beginTransTime 开始交易时间
	 * @param endTransTime 截止交易时间
	 * @param transType 交易类型
	 * @param pageIndex 当前页号
	 * @param pageSize 每页记录数
	 * @return
	 */
	List<AccountLog> findAccountLogWithPage(String userName, Date beginTransTime, Date endTransTime,
			TransType[] transType, Integer pageIndex, Integer pageSize);

	Long findAccountLogWithCount(String userName, Date beginTransTime, Date endTransTime,
			TransType[] transType);

	/**
	 * <pre>
	 * 动态分页查询用户资金明细流水
	 * </pre>
	 * @param pageIndex 当前页号
	 * @param pageSize 每页记录数
	 * @param sortord 排序方式
	 * @param rstcn4and 对AccountLog实体的与条件
	 * @return
	 */
	QueryResult<AccountLog> findAccountLogByPage(Integer pageIndex, Integer pageSize,
			LinkedHashMap<String, OrderType> sortord, Restriction... rstcn4and);

	/**
	 * <pre>
	 * 统计资金明细的交易金额
	 * </pre>
	 * @param betCardNo 投注卡号
	 * @param beginTransTime 开始请求时间
	 * @param endTransTime 结束请求时间
	 * @return Object['交易类型', '交易本金', '交易奖金', '交易赠金']
	 */
	List<Object> findAccountLogMoneySta(String betCardNo, Date beginTransTime, Date endTransTime);

	/**
	 * <pre>
	 * 查询充值记录
	 * </pre>
	 * @param pageIndex 当前页码
	 * @param pageSize 每页显示数
	 * @param sortord 排序方式
	 * @param betCardNo 投注卡号
	 * @param beginRequestTime 充值开始时间段
	 * @param endRequestTime 充值结束时间段
	 * @return
	 */
	public QueryResult<Payment> findPaymentByPage(Integer pageIndex, Integer pageSize,
			LinkedHashMap<String, OrderType> sortord, String betCardNo, Date beginRequestTime, Date endRequestTime);

	/**
	 * 根据投注卡、资金描述、
	 * @param betCardNo 投注卡号
	 * @param note 资金描述
	 * @param transType 交易类型
	 * @return
	 */
	List<AccountLog> findAccountLogByProperty(String betCardNo, String note, AccountTransType[] transType);

	public AccountLog findAccountLog(String referenceId, AccountTransType type);

	public Integer findDrawingSumByParam(String betCardNo, String refrenceId);

}
